package br.com.ff.manager.managebean;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import br.com.ff.common.StatusEnum;
import br.com.ff.common.exception.EntidadeDuplicadaException;
import br.com.ff.manager.managebean.base.BaseManagedBean;
import br.com.ff.tipoveiculo.session.TipoVeiculoLocal;
import br.com.ff.tipoveiculo.to.TipoVeiculoTO;

public class CrudTipoVeiculo extends BaseManagedBean {
	
	@EJB
	TipoVeiculoLocal crudTipoVeiculoLocal;
	
	private List<SelectItem> listaStatus = new ArrayList<SelectItem>();
	
	private int statusValue;
	
	private List<TipoVeiculoTO> tiposVeiculo = new ArrayList<TipoVeiculoTO>();
	
	private TipoVeiculoTO tipoVeiculoTO = new TipoVeiculoTO();
	
	@PostConstruct
	private void init(){
		tiposVeiculo = consultar();
	}
	
	public List<TipoVeiculoTO> consultar(){ 
		return crudTipoVeiculoLocal.findAll();
	}
	
	public String goIncluir() throws IOException {
		tipoVeiculoTO = new TipoVeiculoTO();
		return "go_salvar";
	}
	public void goEditar(ActionEvent event) throws IOException {
		UIParameter component = (UIParameter) event.getComponent().findComponent("id");
		Long id = (Long)component.getValue();
		
		tipoVeiculoTO = crudTipoVeiculoLocal.findById(id);
		
		redirecionarPara("salvarTipoVeiculo.xhtml");
	}
	
	public String salvar() throws IOException {
		
		String tipoVeiculo = getTipoVeiculoTO().getTipoVeiculo();
		
		if (tipoVeiculo == null || tipoVeiculo.equals("")) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Tipo veiculo e obrigatorio"));
		}
		
		if (getStatusValue() < 0) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Status e obrigatorio"));
		}
		
		if (FacesContext.getCurrentInstance().getMessages().hasNext()) {
			return "";
		}
			
		if (getStatusValue() == 1) {
			tipoVeiculoTO.setStatus(StatusEnum.ATIVO);
		} else {
			tipoVeiculoTO.setStatus(StatusEnum.INATIVO);
		}
		
		try {
			if (tipoVeiculoTO.getId() != null) {
				crudTipoVeiculoLocal.atualizar(tipoVeiculoTO);
			} else {
				crudTipoVeiculoLocal.salvar(tipoVeiculoTO);
			}
		} catch (EntidadeDuplicadaException e) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage(e.getMessage()));
			return "";
		}
		
		redirecionarPara("msgSucesso.xhtml?url=consultarTipoVeiculo.xhtml");
		
		return "success";
	}
	
	public void remover(ActionEvent event) throws IOException {
		
		UIParameter component = (UIParameter) event.getComponent().findComponent("id");
		Long id = (Long)component.getValue();
		crudTipoVeiculoLocal.remover(id);
		
		redirecionarPara("msgSucesso.xhtml?url=consultarTipoVeiculo.xhtml");
		
	}
	 
	public List<TipoVeiculoTO> getTiposVeiculo() {
//		this.tiposVeiculo = consultar();
		return tiposVeiculo;
	}
	
	public void setTiposVeiculo(List<TipoVeiculoTO> tiposVeiculo) {
		this.tiposVeiculo = tiposVeiculo;
	}

	public TipoVeiculoTO getTipoVeiculoTO() {
		return tipoVeiculoTO;
	}

	public void setTipoVeiculoTO(TipoVeiculoTO tipoVeiculoTO) {
		this.tipoVeiculoTO = tipoVeiculoTO;
	}

	public List<SelectItem> getListaStatus() {
		
		if (listaStatus.isEmpty()) {
			listaStatus = gerarListStatus();
		}
		return listaStatus;
		
	}

	public void setListaStatus(List<SelectItem> listaStatus) {
		this.listaStatus = listaStatus;
	}

	public int getStatusValue() {
		return statusValue;
	}

	public void setStatusValue(int statusValue) {
		this.statusValue = statusValue;
	}
}
